#include "myuart.h"
#include "usart.h"
#include <stdio.h>
#include <stdarg.h>

void Serial_SendByte(uint8_t Byte){
	
	HAL_UART_Transmit(&huart6,&Byte,sizeof(Byte),1000);
	//等待标志位
	while(__HAL_UART_GET_FLAG(&huart6,UART_FLAG_TXE)==0)
		;
	
}

void Serial_SendByte_DMA(uint8_t Byte){
	
	uint8_t txBuffer[] = {Byte};
	HAL_UART_Transmit_DMA(&huart6,txBuffer,sizeof(txBuffer));
	//等待标志位
	while(__HAL_UART_GET_FLAG(&huart6,UART_FLAG_TC)==0)
		;
	// 清除标志位
  __HAL_UART_CLEAR_FLAG(&huart6, UART_FLAG_TC);
}


void Serial_SendArray(uint8_t *Array,uint16_t Length){
	
	uint16_t i;
	for(i=0;i<Length;i++){
		Serial_SendByte(Array[i]);
	}
}

void Serial_SendString(char *String){
	
	uint16_t i;
	for(i=0;String[i]!='\0';i++){
		Serial_SendByte(String[i]);
	}
}

void Serial_SendString_DMA(char *String){
	
	uint16_t i;
	for(i=0;String[i]!='\0';i++){
		Serial_SendByte_DMA(String[i]);
	}
}


uint32_t Serial_Pow(uint32_t X,uint32_t Y){
	uint32_t Result=1;
	while(Y--){
		Result*=X;
	}
	return Result;
}

void Serial_SendNumber(uint32_t Number,uint8_t Length){
	
	uint8_t i;
	for(i=0;i<Length;i++){
		Serial_SendByte(Number/Serial_Pow(10,Length-i-1)%10+'0');
	}
}

int fputc(int ch,FILE *f){
	Serial_SendByte(ch);
	return ch;
}

void Serial_Printf(char *format, ...){
	char String[100];
	va_list arg;//定义一个参数列表变量
	va_start(arg,format);//从format位置开始接收参数表，放在arg里面
	vsprintf(String,format,arg);//封装格式要用vs
	va_end(arg);
	Serial_SendString(String);
}

void Serial_Printf_DMA(char *format, ...){
	char String[100];
	va_list arg;//定义一个参数列表变量
	va_start(arg,format);//从format位置开始接收参数表，放在arg里面
	vsprintf(String,format,arg);//封装格式要用vs
	va_end(arg);
	Serial_SendString_DMA(String);
}
